const logger = require('./utils/logger');
const voiceRecognition = require('./utils/voiceRecognition');

// 配置全局的错误处理器来捕获未处理的Promise错误
if (typeof wx.onUnhandledRejection === 'function') {
  wx.onUnhandledRejection(({ reason }) => {
    // 记录错误但不显示给用户
    try {
      if (reason && reason.errMsg &&
        (reason.errMsg.includes('no such file or directory') ||
          reason.errMsg.includes('fail jsapi invalid request data'))) {
        // 忽略文件系统和API错误，这些通常是由于环境限制导致的
        logger.debug('Suppressed non-critical error', reason.errMsg);
      } else {
        // 记录其他类型的未处理错误
        logger.error('Unhandled promise rejection', reason);
      }
    } catch (e) {
      // 确保错误处理器不会抛出错误
    }
  });
}

// 修复：添加未捕获错误监听
wx.onError(function (error) {
  logger.error('全局错误', error);
});

App({
  onLaunch: function () {
    // 初始化日志
    logger.configure({
      level: logger.LogLevel.DEBUG, // 开发阶段使用DEBUG级别
      prefix: '[小厨神]',
      logToConsole: true
    });

    // 修复：安全地调用登录API
    try {
      // 登录
      wx.login({
        success: res => {
          // 发送 res.code 到后台换取 openId, sessionKey, unionId
          logger.info('登录成功', res)
        },
        fail: err => {
          logger.error('登录失败', err)
        }
      });
    } catch (err) {
      logger.error('wx.login调用出错', err);
    }

    // 初始化应用
    this.initApp();
  },

  // 初始化应用
  initApp: function () {
    try {
      // 初始化语音识别模块
      voiceRecognition.init();

      // 这里放置应用初始化逻辑
      logger.info('应用初始化成功');

      // 检查地理位置权限
      if (wx.getSetting) {
        wx.getSetting({
          success: (res) => {
            if (res.authSetting['scope.userLocation']) {
              logger.info('已获得位置信息权限');
            }
          },
          fail: (err) => {
            logger.warn('获取权限设置失败', err);
          }
        });
      }
    } catch (err) {
      logger.error('应用初始化出错', err);
    }
  },

  globalData: {
    userInfo: null,
    searchHistory: [],
    currentLogDetail: null // 用于存储当前查看的日志详情
  }
})